/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package crear;

import apunte.*;

import com.sun.media.ui.ComboBox;
import dataBase.Db;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.Point;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import apunte.*;

/**
 *
 * @author martinLequerica
 */
public class cargarApunte extends JFrame {

    
    //devuelve
    private Apunte devolver;
    
    
    
    //textfield
    private TextField text[];
    private JLabel etiquetas[];
    private String[] nombres = {"Nombre apunte", "Tema", "Letra", "Año", "Cantidad", "Ubicacion", "Precio", "Descripcion", "tags"};
    //combobox
    private ComboBox cmbMateria;
    //base de datos
    private Db db;
    private Statement st;
    //linked list
    private LinkedList<Profesor> llp;
    private LinkedList<Profesor> llps;
    private LinkedList<Carrera> llc;
    private LinkedList<Carrera> llcs;
    private LinkedList<Materia> llm;
    //botones
    private JButton aceptar, cancelar, profesorMas, carreraMas, profesorMenos, carreraMenos, agregarOtro;
    //paneles
    private JPanel pjp;
    private JPanel cjp;
    private JFrame jf;
    private JPanel jp;
    //
    int numer;
    //variables
    private Profesor pr;

    public cargarApunte() throws SQLException {
        
        super("Cargar Apunte");
    devolver = new Apunte();
        //inicializo el layout
        setLayout(new GridLayout(14, 2));
        setSize(500, 450);
        setLocation(new Point(300, 300));

        //fin inicializacion


        db = new Db();
        st = db.getStatement();

        //inicializo botones
        aceptar = new JButton("Aceptar");
        cancelar = new JButton("Cancelar");
        profesorMas = new JButton("+");
        carreraMas = new JButton("+");
        profesorMenos = new JButton("-");
        carreraMenos = new JButton("-");
        agregarOtro = new JButton("Agregar otro");

        //botones

        //combobox


        cmbMateria = new ComboBox();
        //fin combobox

        //linkedlist
        llp = new LinkedList();
        llc = new LinkedList();
        llps = new LinkedList();
        llcs = new LinkedList();
        llm = new LinkedList();

        //fin linkedlist

        //Fin inicializacion de componentes

        text = new TextField[9];
        etiquetas = new JLabel[9];
        //inicio creacion estaticos
        //creo todos los campos label
        for (int i = 0; i < nombres.length; i++) {

            etiquetas[i] = new JLabel();
            etiquetas[i].setText(nombres[i]);

        }

        //creo los textfields

        for (int i = 0; i < nombres.length; i++) {

            text[i] = new TextField();

        }







        for (int i = 0; i < 9; i++) {

            add(etiquetas[i]);
            add(text[i]);


        }
        //termino crear estatico




        //traigo carrera

        ResultSet tc = traigoMateria();

        while (tc.next()) {

            llm.add(new Materia(tc.getInt("idmateria"), tc.getString("nombreMateria"), tc.getString("jefeDeCatedra")));

        }

        for (int i = 0; i < llm.size(); i++) {

            cmbMateria.add("Nombre: " + llm.get(i).getNombreMateria() + " Jefe: " + llm.get(i).getJefeDeCatedra());

        }
        add(new JLabel("Materia"));
        add(cmbMateria);

        //fin traigo carreras






        // Inicio los nuevos jpanel
        pjp = new JPanel();
        pjp.setLayout(new FlowLayout());
        pjp.add(profesorMas);
        pjp.add(profesorMenos);
        add(new JLabel("Añadir Profesor"));
        add(pjp);

        cjp = new JPanel();
        cjp.setLayout(new FlowLayout());
        cjp.add(carreraMas);
        cjp.add(carreraMenos);
        add(new JLabel("Añadir Carrera"));
        add(cjp);

        //cierro los jpanel




        add(agregarOtro);
        JButton fl = new JButton("");
        fl.setEnabled(false);
        add(fl);
        add(aceptar);
        add(cancelar);




        aceptar.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent ae) {
                String[] datos = devolverDatos();

                if (todosLosDatos(datos, llm)) {

                    Apunte ap = new Apunte(datos);
                    ap.setMateria(new Materia(llm.get(cmbMateria.getSelectedIndex()).getIdmateria(), llm.get(cmbMateria.getSelectedIndex()).getNombreMateria(), llm.get(cmbMateria.getSelectedIndex()).getJefeDeCatedra()));

                    cargarCarreraApunte(ap);
                    cargarProfesores(ap);
                    //para cuando necesite el ultimo apunte cargado
                    
                    devolver = ap;
                    JOptionPane.showMessageDialog(null, ap.getNombreApunte());
                    try {
                        new ManejoApunte().guardarApunte(ap);
                        setVisible(false);
                    } catch (SQLException ex) {
                        Logger.getLogger(cargarApunte.class.getName()).log(Level.SEVERE, null, ex);
                    }
                } else {

                    JOptionPane.showMessageDialog(null, "Todos los campos deben estar completos y al menos debe seleccionar un profesor, una materia y una carrera");
                }

            }

            private boolean todosLosDatos(String[] datos, LinkedList<Materia> llm) {
                boolean flag = true;
                for (int i = 0; i < datos.length; i++) {

                    if (datos[i].isEmpty()) {
                        flag = false;
                    }

                }

                if (llcs.isEmpty()) {
                    flag = false;
                }


                if (llps.isEmpty()) {
                    flag = false;
                }

                if (cmbMateria.getSelectedIndex() == -1) {
                    flag = false;
                }

                return flag;


            }

            private void cargarCarreraApunte(Apunte ap) {
                Iterator<Carrera> i = llcs.iterator();

                while (i.hasNext()) {
                    Carrera next = i.next();

                    ap.setCarrera(next);


                }

            }

            private void cargarProfesores(Apunte ap) {
                Iterator<Profesor> i = llps.iterator();
                while (i.hasNext()) {
                    Profesor next = i.next();
                    ap.setProfesor(next);
                }
            }
        });


        cancelar.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent ae) {


                setVisible(false);


            }
        });


        //fin botones

        //botones mas menos de profesor

        profesorMas.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent ae) {
                try {


//                     anhadirProfesor();
                    new aniadirProfesor(llps, st);

                } catch (SQLException ex) {
                    Logger.getLogger(cargarApunte.class.getName()).log(Level.SEVERE, null, ex);
                }


            }
        });

        carreraMas.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent ae) {

                try {
                    new aniadirCarrera(llcs, st);
                } catch (SQLException ex) {
                    Logger.getLogger(cargarApunte.class.getName()).log(Level.SEVERE, null, ex);
                }

            }
        });

        //fin botones mas menos de profesor


        setVisible(true);






    }

    private ResultSet traigoMateria() throws SQLException {


        return st.executeQuery("select * from materia");



    }

    private String[] devolverDatos() {

        String[] campos = new String[text.length];

        for (int i = 0; i < text.length; i++) {

            campos[i] = text[i].getText();


        }


        return campos;

    }
    
    
    
    public Apunte ultimoCargado(){
        
        
        
        return devolver;
    }
}
